Skip to content

引用

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。

引用的语法格式

类型 & 引用变量名(对象名) = 引用实体;

例如:

cpp
int a = 10;
int& b = a;

创建一个整数变量 a,值是 10,创建一个引用 b,是变量 a 的别名。

引用 示例代码
cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a = 10;
	int& b = a;
	cout << "a的值是:" << a << endl;
	cout << "a在内存中的位置是:" << &a << endl;
	cout << "b的值是:" << b << endl;
	cout << "b在内存中的位置是:" << &b << endl;
    return 0;
}

运行结果:

c
a的值是:10
a在内存中的位置是:0x6ffe04
b的值是:10
b在内存中的位置是:0x6ffe04

分析

通过打印 a 跟 b 的地址值,可以发现 a 跟 b 是同一块位置,只是取了个别名而已。

引用的特点

  • 引用变量的类型必须与它的实体类型一致(因为取别名要符合引用实体的身份,如果类型不一致则会报错)

    警告

c
int a = 10;
char& b = a; //这种是错误写法,a跟b要类型一致

:::

  • 引用变量使用必须要进行初始化(不然没有实体都不知道给谁取别名)

警告

int& b; //没有初始化,错误写法

一个变量可以有多个引用(就相当于一个变量有好几个别名,这是可以的)

cpp
int a = 10;
int& b = a;
int& c = a;

这种是没问题的,相当于 a 变量有两个别名,分别是 b 跟 c。

引用与函数的结合使用

  • 引用变量作为函数参数
引用变量作为函数参数 示例代码
cpp
#include<bits/stdc++.h>
using namespace std;
void fun(int& c,int& d){
	int tmp = c;
	c = d;
	d = tmp;
}
int main()
{
    int a = 10;
	int b = 100;
	cout << "交换之前:" << endl;
	cout << "a的值是:" << a << endl;
	cout << "b的值是:" << b << endl;
	fun(a,b);
	cout << "交换之后:" << endl;
	cout << "a的值是:" << a << endl;
	cout << "b的值是:" << b << endl;
    return 0;
}

运行结果:

c
交换之前:
a的值是:10
b的值是:100
交换之后:
a的值是:100
b的值是:10

分析

函数 func 里的 c 是 a 的别名,d 是 b 的别名,在 fun 函数里面对 c 跟 d 进行交换,实际上就是给 a 跟 b 进行交换。
并且没有额外开辟两个变量的空间,相比较,引用还是比较节约空间的。

引用 小练习